package br.gov.sjc.export;

import java.io.BufferedReader;
import java.io.File;  
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;  
import java.util.Calendar;
import br.gov.sjc.socialalimenta.SocialAlimenta2Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;


public class CriarArquivoTXT {
	private static final String TAG = "CriarArquivoTXT";
	private Context context;

	public CriarArquivoTXT(Context context){
		this.context = context;

	}
	public String dataHoje(){
		String data;
		Calendar calendario = Calendar.getInstance();
		int ano = calendario.get(Calendar.YEAR);
		int mes = calendario.get(Calendar.MONTH);
		int dia = calendario.get(Calendar.DAY_OF_MONTH);
		int hora = calendario.get(Calendar.HOUR_OF_DAY);
		int min = calendario.get(Calendar.MINUTE);
		int seg = calendario.get(Calendar.SECOND);
		int mseg = calendario.get(Calendar.MILLISECOND);
		//data = String.valueOf(dia) + ""+ String.valueOf(mes+1) + "" + String.valueOf(ano);
		data = String.valueOf(ano)+"-"+ String.valueOf(mes+1)+"-"+String.valueOf(dia)+"-"+String.valueOf(hora)+ String.valueOf(min)+ String.valueOf(seg)+ String.valueOf(mseg);
		return data;
	}
	/**
	 * Escreve no arquivo texto.
	 * @param text Texto a ser escrito.
	 * @return True se o texto foi escrito com sucesso.
	 */
	public boolean WriteFile(String text){
		try {
			NomeArquivo na = new NomeArquivo(context);
			
			String NomeArquivo = "socialAlimenta-";
			//TODO: Chamando o ID = 1 (somente deve existir esse ID nessa tabela.
			NomeArquivo += na.PlacaPatrimonial(1);
			Log.i(TAG, "Nome do arquivo:"+NomeArquivo);

			// Abre o arquivo para escrita ou cria se não existir
			FileOutputStream out = context.openFileOutput(NomeArquivo+".txt",
					Context.MODE_APPEND);


			out.write(text.getBytes());
			out.write("\r\n".getBytes());
			out.flush();
			out.close();
			Log.i("WriteFile", "Criou o Arquivo");
			return true;
		} catch (Exception e) {
			Log.e(TAG, e.toString());
			return false;
		}
	}
	/**
	 * Escreve o arquivo texto com o resultado do bd
	 * @return string para ser escrita no TXT.
	 * @throws Exception
	 */
	public String DefineTexto(){
		String Texto = "";
		//Texto += "\r\n";
		//Declara Cursor
		//MainTest mt = new MainTest();
		//mt.main(null);
		Log.v("DefineTexto", "MainTest Passou");
		Cursor cVerifica = null;
		SQLiteDatabase BancoDados = exportarDados.BancoDados;
		//String nomeBanco = "SocialAlimenta";

		//Declara base de dados
		//SQLiteDatabase bd = SocialAlimenta2Activity.BancoDados ;



		if (BancoDados.isOpen()){
			Log.v(TAG, "BD OPEN");
			try{
				/**
				 * TODO: Erro Encontrado ao gerar o TXT Final
				 * 02-27 17:17:02.615: I/CriarArquivoTXT(18375): BD OPEN
				 - 02-27 17:17:03.745: E/CursorWindow(18375): need to grow: mSize = 4194304, size = 28, freeSpace() = 17, numRows = 2173
				 - 02-27 17:17:03.745: E/CursorWindow(18375): not growing since there are already 2173 row(s), max size 4194304
				 - 02-27 17:17:03.745: E/Cursor(18375): Failed allocating 28 bytes for text/blob at 2172,25
				 */
				String SQLQuery = "Select * from vw_SocialA_total";
				Log.v(TAG, "DefineTexto() SQLQuery");
				cVerifica = BancoDados.rawQuery(SQLQuery, null);
				Log.v(TAG, "DefineTexto() cVerifica");
				long contaCursor = cVerifica.getCount();
				Log.v(TAG, "DefineTexto() contaCursor: "+contaCursor);
				if (contaCursor !=0 ){
					Log.v(TAG, "DefineTexto() contaCursor: !=0 ="+contaCursor);
					cVerifica.moveToFirst();
					Log.i(TAG, "DefineTexto cVerifica !=0 == "+contaCursor);
					do {
						//TODO: Inserir o Responsável
						//Texto += cVerifica.getString(cVerifica.getColumnIndex("Resp"));
						//Texto += ";";
						Texto += cVerifica.getInt(cVerifica.getColumnIndex("SiasN"));
						Texto += ";";
						// *** tab_SocialA_Endereco
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Endereco"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("numero"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Ap"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Bloco"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Complemento"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Referencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("CEP"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Bairro"));
						Texto += ";";
						// *** tab_SocialA_Localizado
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Localizado"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Mudouse"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("EndInex"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Sosam"));
						Texto += ";";
						// *** tab_SocialA_Nome
						Texto += cVerifica.getInt(cVerifica.getColumnIndex("idMembro"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Nome"));
						Texto += ";"; 
						Texto += cVerifica.getString(cVerifica.getColumnIndex("DNasc"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("NomeMae"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("NomePai"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("NaturalCidade"));
						Texto += ";";
						// *** tab_SocialA_DadosPessoais
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Sexo"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("EstCivil"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Estuda"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Cor"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Alfabetiza"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("FreqEscola"));
						Texto += ";";
						// *** tab_SocialA_Escolaridade
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Ensino"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("EnsCurso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("EnsSerie"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("EnsConcluido"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("EnsEsp"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("RG"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("RGExp"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("RGUF"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("RGDataExp"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("CPF"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("CPFDataExp"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("CTPS"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("CTPSSerie"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("CTPSDataExp"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("NIS"));
						Texto += ";";
						// *** tab_SocialA_Trabalho
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Trabalha"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Tipo"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Rendimento"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("HorasporMes"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Ocupacao"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("INSS"));
						Texto += ";";
						// *** tab_SocialA_TrabalhoOFR
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Fonte"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Valor"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Comprovante"));
						Texto += ";";
						// *** tab_SocialA_IndSegAlimen
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Gestante"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("GestanteAcompMedico"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("GestanteAcompNutric"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Nutriz"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("NutrizAcompMedico"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("NutrizAcompNutric"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Intolerancia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("IntoleranciaAcompMedico"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("IntoleranciaAcompNutric"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("IntoleranciaLactose"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("IntoleranciaGluten"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("IntoleranciaProteina"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("IntoleranciaOutra"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Diabete"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("DiabeteAcompMedico"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("DiabeteAcompNutric"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Anemia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("AnemiaAcompMedico"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("AnemiaAcompNutric"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Hipertensao"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("HipertensaoAcompMedico"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("HipertensaoAcompNutric"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("Obesidade"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("ObesidadeAcompMedico"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("ObesidadeAcompNutric"));
						Texto += ";";
						// *** tab_SocialA_AcessoAlimen
						Texto += cVerifica.getString(cVerifica.getColumnIndex("ArrozFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("ArrozFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("LeiteFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("LeiteFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("DerivadosFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("DerivadosFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("PaesFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("PaesFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("ManteigaFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("ManteigaFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("MacarraoFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("MacarraoFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("FubaFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("FubaFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("FrutasFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("FrutasFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("VerdurasFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("VerdurasFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("CarneFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("CarneFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("OvosFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("OvosFormaAcesso"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("FarinhasFrequencia"));
						Texto += ";";
						Texto += cVerifica.getString(cVerifica.getColumnIndex("FarinhasFormaAcesso"));
						Texto += ";";/**/
						Texto += "\r\n";
						Log.v(TAG, "DefineTexto Criada linha: "+cVerifica.getPosition());
					} while(cVerifica.moveToNext());

				}else {
					Log.e(TAG, "DefineTexto cVerifica = 0 == "+contaCursor);
				}
			}catch (Exception Err){

				Texto = "Erro Encontrado:bd.rawQuery(SQLQuery, null); "+Err.getMessage();
				Log.e(TAG, "DefineTexto bd.rawQuery(SQLQuery, null); "+Err.getMessage());

			}finally{
				BancoDados.close();
				Log.v(TAG, "DefineTexto BancoDados.close(); ");
			}
		}else{
			Log.e(TAG, "BancoDados Not Open ");
			Texto += "Banco de Dados nåo foi aberto corretamente";
		}
		return Texto;
	}


	/**
	 * Faz a leitura do arquivo
	 * @return O texto lido.
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	public String ReadFile() throws FileNotFoundException, IOException{
		NomeArquivo na = new NomeArquivo(context);
		String NomeArquivo = "socialAlimenta-";
		//TODO: Chamando o ID = 1 (somente deve existir esse ID nessa tabela.
		NomeArquivo += na.PlacaPatrimonial(1);
		Log.i("WriteFile", "Nome do arquivo:"+NomeArquivo);

		File file = context.getFilesDir();
		File textfile = new File(file + "/"+NomeArquivo+".txt");
		Log.i(TAG, "ReadFile file= "+file);

		FileInputStream input = context.openFileInput(NomeArquivo+".txt");
		byte[] buffer = new byte[(int)textfile.length()];

		input.read(buffer);

		return new String(buffer);
	}
	/**
	 * deleta o arquivo
	 * @return verdadeiro se deletado com sucesso.
	 * @throws Exception
	 * @throws IOException
	 */
	public boolean deleteFile(String name){
		boolean Retorno = false;

		return Retorno;
	}
	/*
	 * Load file content to String
	 */
	public static String loadFileAsString(String filePath) throws java.io.IOException{
		StringBuffer fileData = new StringBuffer(1000);
		BufferedReader reader = new BufferedReader(new FileReader(filePath));
		char[] buf = new char[1024];
		int numRead=0;
		while((numRead=reader.read(buf)) != -1){
			String readData = String.valueOf(buf, 0, numRead);
			fileData.append(readData);
		}
		reader.close();
		return fileData.toString();
	}

	/*
	 * Get the STB MacAddress
	 */
	public String getMacAddress(){
		try {
			return loadFileAsString("/sys/class/net/eth0/address")
					.toUpperCase().substring(0, 17);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}


}
